草庐IT

pointers - 指针问题

全部标签

json - 将指针转换为其在 json 解码器中的主要值

如何将*string转换为string?这是我的错误代码:cannotusem.Body(type*string)astypestringinargumenttostrings.NewReader这是我的代码:dec:=json.NewDecoder(strings.NewReader(m.Body)) 最佳答案 取消引用指针以从*string获取string的值,然后在strings.NewReader函数中使用它。例如:-strValue:=*m.Bodydec:=json.NewDecoder(strings.NewReade

go - Do map of pointers 与常用的maps使用方式不同

我想用map创建缓存。由于map不允许引用其值,因此无法更改被调用函数中的值。经过一些搜索,我发现,创建指针(结构)映射是可能的。它几乎解决了问题并且可以像引用变量一样工作但正如我发现一些使用这种方法的map。我担心使用它是安全的。有没有人有使用指针map的经验?这是正确的使用方式吗?packagemainimport"fmt"typeCachestruct{namestringcounterint}funcincr(cCache){c.counter+=1}funcincrp(c*Cache){c.counter+=2}funcmain(){m:=make(map[string]Ca

go - panic : runtime error: invalid memory address or nil pointer dereference [signal 0xc0000005 code=0x0 addr=0x8 pc=0x48be5c] goroutine 1 [running]:

我正在尝试使用链表实现多项式的加法。该程序成功地添加了幂0系数,但在第一次遍历后它出现了困惑。这是我到目前为止编写的代码。在初始化temp1!=nil之后,循环遍历else但当权力不同时不进入if循环并进入panic状态packagemainimport("fmt")typeNodestruct{coefficientintpowerintnext*Node}typeliststruct{head*Nodecountint}funcmain(){list1:=&list{}list1.addVariable(5,2)list1.addVariable(4,1)list1.addVari

go - MacOS 上的安装问题

我刚开始了解Go,我从这里为MacOS安装了它,它运行良好,但是当我尝试设置我的go工作区“https://golang.org/doc/install#macos”时,我遵循了这个教程:https://www.youtube.com/watch?v=5qI8z_lB5Lw,但是在设置我的GOPATH之后,每当我尝试运行与go相关的命令时,它总是给我这个错误。错误:go:GOPATH条目是相对的;必须是绝对路径:"Users/shahtajkhalid/Documents/go"这个问题有解决方案,但主要是针对缺少分号ar反斜杠的窗口,但这里的地址完全相同,我无法继续通过这个进一步测试

go - 解决非主包中的相对路径问题

我在解析我的Go应用程序中的相对文件路径时遇到问题。对于这个应用程序,我决定制作一个包,为不同的配置文件提供统一的界面。conf包包含相关的数据文件,所以这基本上是文件树:app/conf+config.go+config.json+...app/code+code.go+code_test.go问题是,当app/code/code_test.go中定义的测试调用app/conf包中的函数时,该函数又尝试打开app/conf/config.json,由于工作目录位于app/code,因此相对路径困惑。我查看了其他提及path/filepath包的SO答案,尤其是filepath.Abs

go - 是什么原因导致 "panic: runtime error: invalid memory address or nil pointer dereference"?

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭3年前。Improvethisquestion我的项目有问题。出现错误:panic:runtimeerror:invalidmemoryaddressornilpointerdereference[signalSIGSEGV:segmentationviolationcode=0x1addr=0x0pc=0x44c16f]我做错了什么?套餐Ap

pointers - go - 修改指向 slice 的指针不会修改原始指针

我尝试创建一个结构,其中一个字段是指向现有空slice的指针。然后我修改结构体的字段,稍后我尝试从原始slice中获取新内容-但它仍然是空的!这是演示代码:packagemainimport("fmt")typeAstruct{B[]int}funcmain(){c:=[]int{}a:=&A{B:c,}a.B=append(a.B,5)fmt.Println(c)fmt.Println(a)}这里的结果是:[]&{[5]}问题是——如何从原始slice和结构的字段中获取实际的slice内容?我在这里没有将slice作为参数传递给函数。 最佳答案

go - 为 big.Int 创建了类型别名 - 但我无法使用其指针接收器设置它?

我认为类型别名比嵌入结构更优雅。你看,如果我创建一个嵌入big.Int的新类型BigInt,我必须注意嵌入的big.Int始终被初始化,并且除非我重新实现big.Int,比如Cmp、Add、Sub,所有依赖于这个新类型的代码都需要知道BigInt的方法实际上接收到一个big.Int对于他们的论点。这是愚蠢的。所以我尝试给类型起别名。typeBigIntbig.Int//StringcastsBigIntintobig.IntandusesitsStringmethod.func(b*BigInt)String()string{bc:=big.Int(*b)returnbc.String

arrays - 即使初始化也没有指针取消引用

我的目标是声明一个空的二维数组,然后在每次do()运行时对其进行初始化并填充值。问题是即使我正在初始化数组,我也会得到一个nil指针取消引用。这是我试图在服务器模拟器上完成的一个简单版本。packagemainimport"fmt"typeSrvstruct{A*[][]int}func(sSrv)init(){arr:=make([][]int,0)*s.A=arr}funcmain(){s:=Srv{nil}s.init()printSlice(*s.A)do(s.A)do(s.A)}funcprintSlice(s[][]int){fmt.Printf("len=%dcap=%d

json.Unmarshal 接口(interface)指针与稍后的类型断言

因为我经常解码http.Response.Body,我想我可以写一个函数来处理读取、关闭和解码成各种不同结构的所有麻烦。这就是为什么我引入了一个函数funcunmarhalInterface(closer*io.ReadCloser,v*interface{})error然后可以用t:=i.(T)断言返回值.根据thisanswer我已经把它包装成*interface{}类型的值了,但因为覆盖类型是interface{}而不是myStruct,json包实现选择map[string]interface{}.之后类型断言失败(当然)。有什么我遗漏的或需要这个实现“手动”的类型断言,这意味